<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        
        
        
        <link rel="shortcut icon" href="../../img/favicon.ico">

	<title>数据存储 - JavaBaas</title>

        <link href="../../css/bootstrap-custom.min.css" rel="stylesheet">
        <link href="../../css/font-awesome-4.0.3.css" rel="stylesheet">
        <link href="../../css/base.css" rel="stylesheet">
        <link rel="stylesheet" href="../../css/highlight.css">

        <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
            <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
            <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
        <![endif]-->

        
    </head>

    <body>

        <div class="navbar navbar-default navbar-fixed-top" role="navigation">
    <div class="container">

        <!-- Collapsed navigation -->
        <div class="navbar-header">
            
            <!-- Expander button -->
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            

            <!-- Main title -->
            <a class="navbar-brand" href="../..">JavaBaas</a>
        </div>

        <!-- Expanded navigation -->
        <div class="navbar-collapse collapse">
            
                <!-- Main navigation -->
                <ul class="nav navbar-nav">
                
                
                    <li >
                        <a href="../..">主页</a>
                    </li>
                
                
                
                    <li class="dropdown active">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">功能概述 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                        
                            
<li class="active">
    <a href="./">数据存储</a>
</li>

                        
                        </ul>
                    </li>
                
                
                
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">用户手册 <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                        
                            
<li >
    <a href="../../commandline/">命令行工具</a>
</li>

                        
                            
<li >
    <a href="../../restapi/">REST API</a>
</li>

                        
                        </ul>
                    </li>
                
                
                
                    <li >
                        <a href="../../download/">下载</a>
                    </li>
                
                
                </ul>
            

            <ul class="nav navbar-nav navbar-right">
                <li>
                    <a href="#" data-toggle="modal" data-target="#mkdocs_search_modal">
                        <i class="fa fa-search"></i> Search
                    </a>
                </li>
                
                    <li >
                        <a rel="next" href="../..">
                            <i class="fa fa-arrow-left"></i> Previous
                        </a>
                    </li>
                    <li >
                        <a rel="prev" href="../../commandline/">
                            Next <i class="fa fa-arrow-right"></i>
                        </a>
                    </li>
                
                
            </ul>
        </div>
    </div>
</div>

        <div class="container">
            
                <div class="col-md-3"><div class="bs-sidebar hidden-print affix well" role="complementary">
    <ul class="nav bs-sidenav">
    
        <li class="main active"><a href="#_1">数据存储功能概览</a></li>
        
            <li><a href="#_2">对象存储</a></li>
        
            <li><a href="#_10">文件存储</a></li>
        
    
    </ul>
</div></div>
                <div class="col-md-9" role="main">

<h1 id="_1">数据存储功能概览</h1>
<p>数据存储作为JavaBaas的最核心功能，实现了结构化数据的存储，并提供API以及客户端SDK供用户调用。在不编写后台代码的情况下，实现移动客户端产品（或富客户端网页）的开发运行。</p>
<h2 id="_2">对象存储</h2>
<p>JavaBaas使用MongoDB作为数据存储数据库。虽然MongoDB为无模式数据库，但是使用JavaBaas存储数据时，我们需要先设计类及字段，且每个字段都有其指定的数据类型（字符型、数值型等），存储数据时必须遵从其数据类型。</p>
<h3 id="_3">对象</h3>
<p>对象是JavaBaas中最基本的数据存储单元。所有的对象必须为某一个类的实例。</p>
<h3 id="_4">类</h3>
<p>在JavaBaas中，数据使用类进行组织。用户可以自己创建类，类名需使用英文字母开头且名称中只能包含数字与英文字母。同时、系统初始化后会自动创建用户类、设备类、文件类等系统内建类，内建类名使用下划线_开头，系统内建类禁止删除或修改。</p>
<h4 id="_5">系统内建类</h4>
<div style="width:400px;">

<table>
<thead>
<tr>
<th>名称</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>_User</td>
<td>用户</td>
</tr>
<tr>
<td>_Installation</td>
<td>设备</td>
</tr>
<tr>
<td>_File</td>
<td>文件</td>
</tr>
</tbody>
</table>
</div>

<h3 id="_6">字段</h3>
<p>在类中创建字段以存储数据。字段的名称必须使用英文字母开头且名称中只能包含数字与英文字母。每个字段在创建时，必须选择一个取值类型，值的类型可以是字符串、数字、日期等类型（参见<code>数据类型</code>），字段类型一旦设置无法更改。每个类在创建后，系统会自动创建<code>id</code> <code>createdAt</code> <code>updatedAt</code> <code>acl</code>四个内建字段，系统内建字段禁止删除。</p>
<h4 id="_7">系统内建字段</h4>
<div style="width:400px;">

<table>
<thead>
<tr>
<th>名称</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>唯一标识</td>
</tr>
<tr>
<td>createdAt</td>
<td>创建时间</td>
</tr>
<tr>
<td>updatedAt</td>
<td>更新时间</td>
</tr>
<tr>
<td>acl</td>
<td>权限</td>
</tr>
</tbody>
</table>
</div>

<p><span id="fieldType"/></p>
<h4 id="_8">数据类型</h4>
<div style="width:600px;">

<table>
<thead>
<tr>
<th>名称</th>
<th>编号</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>1</td>
<td>字符串</td>
</tr>
<tr>
<td>Number</td>
<td>2</td>
<td>数字</td>
</tr>
<tr>
<td>Boolean</td>
<td>3</td>
<td>布尔类型</td>
</tr>
<tr>
<td>Date</td>
<td>4</td>
<td>日期</td>
</tr>
<tr>
<td>File</td>
<td>5</td>
<td>文件</td>
</tr>
<tr>
<td>Object</td>
<td>6</td>
<td>对象</td>
</tr>
<tr>
<td>Array</td>
<td>7</td>
<td>数组</td>
</tr>
<tr>
<td>Pointer</td>
<td>8</td>
<td>指针</td>
</tr>
<tr>
<td>GeoPointer</td>
<td>9</td>
<td>地理坐标</td>
</tr>
</tbody>
</table>
</div>

<h3 id="_9">数据关联</h3>
<p>JavaBaas中，使用Pointer类型字段建立对象之间的关联。</p>
<h2 id="_10">文件存储</h2>
<p>文件存储用以存储类似图片、音频、视频等物理文件。<code>JavaBaas</code>的文件存储使用七牛云存储实现。</p>
<h3 id="url">直接使用url创建文件</h3>
<p>当文件已经存在于互联网可以访问的服务器中，且已经获得到一个公网可以访问的url时，可以使用已有的url直接创建文件对象（此时将只记录文件的url地址，而不会为文件创建拷贝）。
如，现在有地址为（https://www.baidu.com/img/baidu_jgylogo1.gif）的图片，为它创建文件对象。</p>
<pre><code class="bash">curl --request POST \
  --url http://127.0.0.1:8080/file \
  --header 'content-type: application/json' \
  --header 'JB-AppId: 56026b5f25ac90b6c1bdb7f2' \
  --header 'JB-Sign: e79208bee1819873bb7e58ba44bc9a4c' \
  --header 'JB-Timestamp: 1443002520836' \
  --data '{&quot;url&quot;:&quot;https://www.baidu.com/img/baidu_jgylogo1.gif&quot;}'
</code></pre>

<p>其中<code>JB-AppId</code>为应用id、<code>JB-Sign</code>为签名、<code>JB-Timestamp</code>为时间戳，请自行修改。</p>
<p>上传成功后，将返回新创建的文件对象id。</p>
<pre><code>{
  &quot;code&quot;: 0,
  &quot;data&quot;: {
    &quot;id&quot;: &quot;560278db25ac60143281619a&quot;
  },
  &quot;message&quot;: &quot;&quot;
}
</code></pre>

<h3 id="sdk">使用七牛SDK存储文件</h3></div>
            
        </div>

        <footer class="col-md-12">
            <hr>
            
            <p>Documentation built with <a href="http://www.mkdocs.org/">MkDocs</a>.</p>
        </footer>

        <script src="../../js/jquery-1.10.2.min.js"></script>
        <script src="../../js/bootstrap-3.0.3.min.js"></script>
        <script src="../../js/highlight.pack.js"></script>
        <script>var base_url = '../..';</script>
        <script data-main="../../mkdocs/js/search.js" src="../../mkdocs/js/require.js"></script>
        <script src="../../js/base.js"></script>

        <div class="modal" id="mkdocs_search_modal" tabindex="-1" role="dialog" aria-labelledby="Search Modal" aria-hidden="true">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
                        <h4 class="modal-title" id="exampleModalLabel">Search</h4>
                    </div>
                    <div class="modal-body">
                        <p>
                            From here you can search these documents. Enter
                            your search terms below.
                        </p>
                        <form role="form">
                            <div class="form-group">
                                <input type="text" class="form-control" placeholder="Search..." id="mkdocs-search-query">
                            </div>
                        </form>
                        <div id="mkdocs-search-results"></div>
                    </div>
                    <div class="modal-footer">
                    </div>
                </div>
            </div>
        </div>

    </body>
</html>
